/**
 * @author:cavion(曹仁道)
 * @email:caorendao187@163.com
 * 2018年3月4日
 */
package org.rk.core.nosql.mongodb.base;

import java.util.Date;
import java.util.List;

import org.rk.core.nosql.mongodb.baseBean.NoSqlParamMap;
import org.springframework.data.mongodb.core.query.Query;

/**
 * @author cavion
 * @描述
 * 2018年3月4日 上午11:09:39
 */
public interface IBaseMongoService<T> {

	/**
	 * 
	 * @author：cavion
	 * @描述：根据mongo生成id查询
	 * 2018年3月4日 上午11:14:30
	 * @param id
	 * @return
	 */
	T findById(String id);
	/**
	 * 
	 * @author：cavion
	 * @描述：条件查询
	 * 2018年3月4日 上午11:56:47
	 * @return
	 */
	List<T> find(Query query);
	/**
	 * 
	 * @author：cavion
	 * @描述：查询创建时间小于某时间的--默认当前系统时间
	 * 2018年3月4日 上午11:14:47
	 * @param id
	 * @return
	 */
	List<T> findLtByCreateTime(Date createTime);
	/**
	 * 
	 * @author：cavion
	 * @描述：查询创建时间大于某时间且小于某时间的--默认当前系统时间
	 * 2018年3月4日 上午11:40:44
	 * @param createTime
	 * @return
	 */
	List<T> findGtLtByCreateTime(Date createTimeStart, Date createTimeEnd);
	/**
	 * 
	 * @author：cavion
	 * @描述：查询创建时间大于某时间的--默认当前系统时间
	 * 2018年3月4日 上午11:16:16
	 * @param createTime
	 * @return
	 */
	List<T> findGtByCreateTime(Date createTime);
	/**
	 * @author：cavion
	 * @描述：根据实体插入
	 * 2018年3月4日 上午11:58:06
	 * @param t
	 */
	void insert(T t);
	/**
	 * @author：cavion
	 * @描述：根据指定属性查询
	 * 2018年3月18日 下午8:48:04
	 * @param propName
	 * @param propObj
	 * @return
	 */
	List<T> findByProperty(String propName, Object propObj);
	/**
	 * @author：cavion
	 * @描述：根据构建参数查询
	 * 2018年3月18日 下午10:41:28
	 * @param paramMapList
	 * @return
	 */
	List<T> findByParamMap(List<NoSqlParamMap> paramMapList);
}
